package pl.edu.pk.psb.bc.dao;

import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pl.edu.pk.psb.bc.ds.MiejsceDs;
import pl.edu.pk.psb.bc.ds.RezerwacjaDs;
import pl.edu.pk.psb.bc.ds.UzytkownikDs;
import pl.edu.pk.psb.bc.util.Miejsce;

@Repository
public class UzytkownikDaoImpl extends GenericDaoImpl<UzytkownikDs> implements UzytkownikDao {

	@Autowired
	MiejsceDao miejsceDao;
	
	public UzytkownikDaoImpl() {
		super(UzytkownikDs.class);
	}

	@Override
	public UzytkownikDs zaloguj(String login, String haslo) {
		Criteria kryteria = sessionFactory.getCurrentSession().createCriteria(UzytkownikDs.class);
		kryteria.add(Restrictions.eq(UzytkownikDs.POLE_LOGIN, login));
		kryteria.add(Restrictions.eq(UzytkownikDs.POLE_HASLO, haslo));
		return (UzytkownikDs) kryteria.uniqueResult();
	}
	
	@Override
	public void rezerwujMiejsca(UzytkownikDs uzytkownik, List<Integer> miejsca, Integer idWydarzenia) {
		RezerwacjaDs rezerwacja = new RezerwacjaDs();
		rezerwacja.setData(new Date());
		rezerwacja.setIdWydarzenia(idWydarzenia);
		uzytkownik.getRezerwacje().add(rezerwacja);
		for (Integer id : miejsca) {
			MiejsceDs miejsce = (MiejsceDs) sessionFactory.getCurrentSession().load(MiejsceDs.class, id);
			if (!miejsce.getTyp().matches(Miejsce.WOLNE.getTyp())) {
				throw new IllegalArgumentException("Podane miejsce jest juz zajete");
			}
			miejsce.setTyp(Miejsce.ZAJETE.getTyp());
			rezerwacja.getMiejsca().add(miejsce);
		}
		sessionFactory.getCurrentSession().saveOrUpdate(uzytkownik);
	}
}
